package com.mrzhou.study.temp;

import com.fasterxml.jackson.core.type.TypeReference;
import com.mrzhou.core.tool.utils.Assert;
import com.mrzhou.core.tool.utils.JacksonUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
 * DNS监控类型工具类
 */
public class DnsMonitorTypeUtil {

    private static Map<String, Map<String, Integer>> map = new HashMap<>(16);

    private static final String STR_REG = "{\"A\":{\"A\":0,\"CNAME\":0,\"MX\":1,\"TXT\":1,\"NS\":0,\"AAAA\":1,\"SRV\":1,\"CAA\":1,\"显性URL\":0,\"隐性URL\":0},\"CNAME\":{\"A\":0,\"CNAME\":0,\"MX\":0,\"TXT\":0,\"NS\":0,\"AAAA\":0,\"SRV\":0,\"CAA\":0,\"显性URL\":0,\"隐性URL\":0},\"MX\":{\"A\":1,\"CNAME\":0,\"MX\":0,\"TXT\":1,\"NS\":0,\"AAAA\":1,\"SRV\":1,\"CAA\":1,\"显性URL\":0,\"隐性URL\":0},\"TXT\":{\"A\":1,\"CNAME\":0,\"MX\":1,\"TXT\":0,\"NS\":0,\"AAAA\":1,\"SRV\":1,\"CAA\":1,\"显性URL\":1,\"隐性URL\":1},\"NS\":{\"A\":0,\"CNAME\":0,\"MX\":0,\"TXT\":0,\"NS\":0,\"AAAA\":0,\"SRV\":0,\"CAA\":0,\"显性URL\":0,\"隐性URL\":0},\"AAAA\":{\"A\":1,\"CNAME\":0,\"MX\":1,\"TXT\":1,\"NS\":0,\"AAAA\":0,\"SRV\":1,\"CAA\":1,\"显性URL\":0,\"隐性URL\":0},\"SRV\":{\"A\":1,\"CNAME\":0,\"MX\":1,\"TXT\":1,\"NS\":0,\"AAAA\":1,\"SRV\":0,\"CAA\":1,\"显性URL\":1,\"隐性URL\":1},\"CAA\":{\"A\":1,\"CNAME\":0,\"MX\":1,\"TXT\":1,\"NS\":0,\"AAAA\":1,\"SRV\":1,\"CAA\":0,\"显性URL\":1,\"隐性URL\":1},\"显性URL\":{\"A\":0,\"CNAME\":0,\"MX\":0,\"TXT\":1,\"NS\":0,\"AAAA\":0,\"SRV\":1,\"CAA\":1,\"显性URL\":0,\"隐性URL\":0},\"隐性URL\":{\"A\":0,\"CNAME\":0,\"MX\":0,\"TXT\":1,\"NS\":0,\"AAAA\":0,\"SRV\":1,\"CAA\":1,\"显性URL\":0,\"隐性URL\":0}}";

    /**
     * 新增监控类型时的规则匹配检查
     * @param source 已存在的监控类型
     * @param target 即将新增的监控类型
     * @return
     */
    public static boolean monitorTypeRegex(String source, String target) {
        Assert.hasText(source, "已存在的监控类型不能为空");
        Assert.hasText(target, "即将新增的监控类型不能为空");
        // 解析监测保护JSON规则串
        TypeReference<Map<String, Map<String, Integer>>> ref = new TypeReference<Map<String, Map<String, Integer>>>(){ };
        map = JacksonUtil.parseObject(STR_REG, ref);
        return Optional.ofNullable(map.get(source)).map(var -> null == var.get(target) ? false: var.get(target).equals(1)).orElse(false);
    }

    public static void main(String[] args) {
//        System.out.println(DnsMonitorTypeUtil.monitorTypeRegex("SRV", "SRV"));
        // 十进制转二进制
        System.out.println(Integer.toBinaryString(65535));
        // 二进制转十进制
        System.out.println(Integer.parseInt("1111111111111111", 2));
        Map<String, String> map = new HashMap<>();
        

    }


}
